package cn.tedu.csmall.server.controller;

/**
 * @author lixin
 * @Date 2022/8/22
 */

import cn.tedu.csmall.server.pojo.dto.CategoryAddNewDTO;
import cn.tedu.csmall.server.pojo.dto.CategoryEditDTO;
import cn.tedu.csmall.server.pojo.vo.CategoryVO;
import cn.tedu.csmall.server.service.ICategoryService;
import cn.tedu.csmall.server.web.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.spring.web.json.Json;

import java.util.List;

/**
 * 组件扫描
 * 1.添加组件注解：（Spring框架范围：以下四个注解是等效的）
 *
 * @Component 通用
 * @Controller 控制器
 * @Service 业务层
 * @Repository 存储层
 * 2.必须在“组件扫描的包下”
 * Spring框架会执行“组件扫描”，会在某个包下查找所有的类，类上添加了组件注解，就会创建此类的对象
 * SpringBoot项目默认执行了组件扫描，且扫描包就是创建项目生成的包（根包）
 * 且子孙包都有效
 */
//@Controller
//@ResponseBody
@RestController
@RequestMapping("categories")
@Lazy //懒加载 用到时才会创建单例
/**
 * 商品类别
 */
@Slf4j
@Api(tags = "2.类别管理模块")
public class CategoryController {
    @Autowired
    public ICategoryService categoryServiceImpl;

    public CategoryController() {
        System.out.println("创建控制器对象：CategoryController");
    }

    @ApiOperation("添加类别")
    @PostMapping("add-new")
    public JsonResult addNew(@RequestBody CategoryAddNewDTO categoryAddNewDTO) {
        log.debug("添加类别信息{}", categoryAddNewDTO.toString());
        categoryServiceImpl.addNew(categoryAddNewDTO);
        return JsonResult.ok();
    }


    @PostMapping("/{id}/delete")
    public JsonResult delete(@PathVariable String id) {
        System.out.println("delete-category");
        categoryServiceImpl.deleteById(Long.parseLong(id));
        return JsonResult.ok();
    }


    @PostMapping("/{id}/update")
    public String updateById(@PathVariable String id, CategoryEditDTO categoryEditDTO) {
        return "";

    }

    @GetMapping
    public JsonResult list() {

        List<CategoryVO> list = categoryServiceImpl.list();
        return JsonResult.ok(list);

    }
}
